use dziennik;
go



create procedure dodajNauczyciela
(
	@imie nvarchar(15),
	@nazwisko nvarchar(60),
	@tytulNaukowy nvarchar(30),

	@userIdString nvarchar(32) output,
	@haslo nvarchar(8) output
)
as
begin
	declare @userId int;
	declare @zapytanie nvarchar(256);

	execute dziennik.dbo.addUser 2, @userId output;
	set @haslo = dziennik.dbo.randString();
	set @userIdString = convert(nvarchar(32),@userId);

	set @zapytanie = concat('use dziennik; create login dziennik_',
		@userIdString,
		' with password = ''',
		@haslo,
		''', check_policy=off'
	);
	exec (@zapytanie);
	
	set @zapytanie = concat('use dziennik; create user dziennik_',
		@userIdString,
		' for login dziennik_',
		@userIdString
	);
	exec (@zapytanie);

	set @zapytanie = concat('use dziennik; alter role nauczyciel add member dziennik_',@userIdString);
	exec (@zapytanie);

	insert into dziennik.dbo.nauczyciele (imie, nazwisko, tytulNaukowy, userId)
	values (@imie, @nazwisko, @tytulNaukowy, @userId);
end;
go



create procedure dodajUcznia
(
	@pesel bigint,
	@imie nvarchar(15),
	@drugieImie nvarchar(15),
	@nazwisko nvarchar(60),
	@imieMatki nvarchar(15),
	@imieOjca nvarchar(15),
	@dataurodzenia date,
	@miejsceUrodzenia nvarchar(30),
	@idKlasy int,

	@userIdString nvarchar(32) output,
	@haslo nvarchar(8) output
)
as
begin
	declare @userId int;
	declare @zapytanie nvarchar(256);

	execute dziennik.dbo.addUser 4, @userId output;
	set @haslo = dziennik.dbo.randString();
	set @userIdString = convert(nvarchar(32),@userId);

	set @zapytanie = concat('use dziennik; create login dziennik_',
		@userIdString,
		' with password = ''',
		@haslo,
		''', check_policy=off'
	);
	exec (@zapytanie);
	
	set @zapytanie = concat('use dziennik; create user dziennik_',
		@userIdString,
		' for login dziennik_',
		@userIdString
	);
	exec (@zapytanie)

	set @zapytanie = concat('use dziennik; alter role uczen add member dziennik_',@userIdString);
	exec (@zapytanie);

	insert into dziennik.dbo.uczniowie 
	(imie, drugieImie, nazwisko, imieMatki, imieOjca, dataUrodzenia, miejsceUrodzenia, idKlasy, userId) 
	values
	(@imie, @drugieImie, @nazwisko, @imieMatki, @imieOjca, @dataUrodzenia, @miejsceUrodzenia, @idKlasy, @userId);
end;
go








create procedure dodajOpiekuna
(
	@imie nvarchar(15),
	@nazwisko nvarchar(60),

	@userIdString nvarchar(32) output,
	@haslo nvarchar(8) output
)
as
begin
	declare @userId int;
	declare @zapytanie nvarchar(256);

	execute dziennik.dbo.addUser 3, @userId output;
	set @haslo = dziennik.dbo.randString();
	set @userIdString = convert(nvarchar(32),@userId);

	set @zapytanie = concat('use dziennik; create login dziennik_',
		@userIdString,
		' with password = ''',
		@haslo,
		''', check_policy=off'
	);
	exec (@zapytanie);
	
	set @zapytanie = concat('use dziennik; create user dziennik_',
		@userIdString,
		' for login dziennik_',
		@userIdString
	);
	exec (@zapytanie);

	set @zapytanie = concat('use dziennik; alter role opiekun add member dziennik_',@userIdString);
	exec (@zapytanie);

	insert into dziennik.dbo.opiekunowie(imie, nazwisko, userId)
	values (@imie, @nazwisko, @userId);
end;
go



create procedure ustawDyrektora
(
	@userIdNauczyciela int
)
as
begin
	if exists(select * from nauczyciele where userId = @userIdNauczyciela)
	begin
		declare @staryDyrektor int;
		select @staryDyrektor = userId from dziennik.dbo.uzytkownicy where rodzaj = 1;
		update dziennik.dbo.uzytkownicy
		set rodzaj = 2 where rodzaj = 1;
		update dziennik.dbo.uzytkownicy
		set rodzaj = 1 where userId = @userIdNauczyciela;
		declare @zapytanie nvarchar(256);
		if not(@staryDyrektor = null)
		begin
			set @zapytanie = concat('use dziennik; alter role dyrektor drop member dziennik_',convert(nvarchar(32),@staryDyrektor));
			exec (@zapytanie);
		end;

		set @zapytanie = concat('use dziennik; alter role dyrektor add member dziennik_',convert(nvarchar(32),@userIdNauczyciela));
		exec (@zapytanie);
	end;
	else
	begin
		raiserror('Nie ma takiego nauczyciela',10,1);
	end
end;
go